package br.org.acessobrasil.portal.action;


import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import br.org.acessobrasil.facade.FacadeException;
import br.org.acessobrasil.portal.facade.InformacaoTipoConteudoFacade;
import br.org.acessobrasil.portal.modelo.Formato;
import br.org.acessobrasil.portal.modelo.InformacaoTipoConteudo;
import br.org.acessobrasil.portal.modelo.TipoConteudo;
import br.org.acessobrasil.portal.modelo.Usuario;

/**
 * @author Fabio Issamu Oshiro
 *
 */
public class InformacaoTipoConteudoAction extends Super{

	private static final long serialVersionUID = 1293801945334863313L;
	private static final Logger logger = Logger.getLogger(InformacaoTipoConteudo.class);

	private static InformacaoTipoConteudoFacade informacaoTipoConteudoFacade;
	
	private List<Formato> listaDeFormato = new ArrayList<Formato>();
	public List<Formato> getListaDeFormato() {
		return listaDeFormato;
	}
	public void setListaDeFormato(List<Formato> listaDeFormato) {
		this.listaDeFormato = listaDeFormato;
	}
	private InformacaoTipoConteudo informacaoTipoConteudo;
	public InformacaoTipoConteudo getInformacaoTipoConteudo() {
		return informacaoTipoConteudo;
	}
	public void setInformacaoTipoConteudo(InformacaoTipoConteudo informacaoTipoConteudo) {
		this.informacaoTipoConteudo = informacaoTipoConteudo;
	}
	
	public InformacaoTipoConteudoFacade getInformacaoTipoConteudoFacade() {
		if(informacaoTipoConteudoFacade==null){
			informacaoTipoConteudoFacade = (InformacaoTipoConteudoFacade)getBean("informacaoTipoConteudoFacade");
		}
		return informacaoTipoConteudoFacade;
	}
	
	private TipoConteudo tipoConteudo;
	public TipoConteudo getTipoConteudo() {
		return tipoConteudo;
	}
	public void setTipoConteudo(TipoConteudo tipoConteudo) {
		this.tipoConteudo = tipoConteudo;
	}
	
	private List<InformacaoTipoConteudo> lista = new ArrayList<InformacaoTipoConteudo>();
	public List<InformacaoTipoConteudo> getLista() {
		return lista;
	}
	public void setLista(List<InformacaoTipoConteudo> lista) {
		this.lista = lista;
	}
	
	public String criar(){
		if(tipoConteudo==null) addActionError("N&atilde;o foi poss&iacute;vel descobrir para qual tipo de conte&uacute;do este formato ser&aacute; criado.");
		
		Usuario usuario = getUsuarioLogado();
		tipoConteudo = getInformacaoTipoConteudoFacade().buscarTipoConteudo(tipoConteudo.getNuTipoConteudo());
		listaDeFormato = getInformacaoTipoConteudoFacade().buscarFormatos();
		try{
			if(getBtnGravar()!=null){
				informacaoTipoConteudo.setNuTipoConteudo(tipoConteudo.getNuTipoConteudo());
				getInformacaoTipoConteudoFacade().criar(usuario, informacaoTipoConteudo);
				usuario.addActionMessage(getText("sucesso.cadastrado.generic",new String[]{informacaoTipoConteudo.getNoInformacao()}));
			}
			//colocar o preenchimento automatico
			lista = getInformacaoTipoConteudoFacade().buscar(getUsuarioLogado(),tipoConteudo);
			informacaoTipoConteudo = new InformacaoTipoConteudo();
			informacaoTipoConteudo.setCoAtivo(true);
			informacaoTipoConteudo.setDeDicaPreenchimento(getText("predefinido.dica"));
			informacaoTipoConteudo.setNoInformacao(getText("predefinido.nome"));
			informacaoTipoConteudo.setNoTag(getText("predefinido.tag"));
			//coloca a orde como ultima por padrao
			informacaoTipoConteudo.setNuOrdem(lista.size()+1);
		}catch(FacadeException e){
			addActionError("Erro: " + e.getMessage());
		}catch(Exception e){
			addActionError("Erro: " + e.getMessage());
			logger.error("Erro inesperado.",e);
		}
		return SUCCESS;
	}
	
	public String listar() {
		lista = getInformacaoTipoConteudoFacade().buscar(getUsuarioLogado(),tipoConteudo);
		tipoConteudo = getInformacaoTipoConteudoFacade().buscarTipoConteudo(tipoConteudo.getNuTipoConteudo());
		return SUCCESS;
	}
	
	public String apagar(){
		try{
			Usuario usuario = getUsuarioLogado();
			informacaoTipoConteudo = getInformacaoTipoConteudoFacade().buscar(usuario,informacaoTipoConteudo.getNuInformacaoTipoConteudo());
			tipoConteudo = getInformacaoTipoConteudoFacade().buscarTipoConteudo(informacaoTipoConteudo.getNuTipoConteudo());
			if(getBtnCancelar()!=null){
				return SUCCESS;
			}else if(getBtnApagar()!=null){
				getInformacaoTipoConteudoFacade().excluir(usuario, informacaoTipoConteudo);
				return SUCCESS;
			}else{
				return INPUT;
			}
		}catch(FacadeException e){
			addActionError("Erro: " + e.getMessage());
		}catch(Exception e){
			addActionError("Erro: " + e.getMessage());
			logger.error("Erro inesperado.",e);
		}
		return INPUT;
	}
		
	public String editar() {
		Usuario usuario = getUsuarioLogado();
		listaDeFormato = getInformacaoTipoConteudoFacade().buscarFormatos();
		try{
			if(getBtnGravar()!=null){			
				getInformacaoTipoConteudoFacade().atualizar(usuario, informacaoTipoConteudo);
				usuario.addActionMessage(getText("sucesso.atualizado.generic",new String[]{informacaoTipoConteudo.getNoInformacao()}));
			}else{
				informacaoTipoConteudo = getInformacaoTipoConteudoFacade().buscar(usuario, informacaoTipoConteudo.getNuInformacaoTipoConteudo());
			}
			tipoConteudo = getInformacaoTipoConteudoFacade().buscarTipoConteudo(informacaoTipoConteudo.getNuTipoConteudo());
		}catch(FacadeException e){
			addActionError("Erro: " + e.getMessage());
		}catch(Exception e){
			addActionError("Erro: " + e.getMessage());
			logger.error("Erro inesperado.",e);
		}
		return SUCCESS;
	}
	
}
